Baza e te dhenave

Ne kapitullin 7, ne seksionin e trete me titull "Ndertimi i nje baze te dhenash reale" paraqitem ndertimin e nje baze te dhenash reale. Qellimisht, shembulli qe trajtuam atje perben bazen e te dhenave qe na nevojitet per projektin e ketij kapitulli.

Per kthjelltesi rikujtojme qe databaza jone do te kete 4 tabela:

  • departamentet - Do te mbaje listen e departamenteve te fakultetit, dhe do te perbehet nga fushat e meposhtme:

    1. id

      • Do te jete celes primar sepse eshte identifikues unik.
      • Nuk do te pranoje vlera NULL sepse duhet te jete gjithnje numer, i tipit int
      • Do te jete AUTO_INCREMENT ne menyre qe kur te shtojme departament te ri, id-ja te gjenerohet automatikisht
    2. emri

      • Do te mbaje emrin e departamentit
      • Do te jete i tipit varchar qe pranon maksimumi 100 karaktere
      • Nuk duhet te pranoje vleren NULL sepse nuk ka sens nje departament me nje emer te tille
    3. pershkrimi

      • Do te mbaje nje pershkrim te departamentit nese eshte i nevojshem, perndryshe NULL
      • Do te jete i tipit text
  • perdoruesit - Do te mbaje listen e departamenteve te fakultetit, dhe do te perbehet nga fushat e meposhtme:

    1. id

      • Do te jete celes primar sepse eshte identifikues unik.
      • Nuk do te pranoje vlera NULL sepse duhet te jete gjithnje numer, i tipit int
      • Do te jete AUTO_INCREMENT ne menyre qe kur te shtojme perdorues te ri, id-ja te gjenerohet automatikisht
    2. emri

      • Do te mbaje emrin e perdoruesit
      • Do te jete i tipit varchar qe pranon maksimumi 80 karaktere
      • Nuk duhet te pranoje vleren NULL sepse nuk ka sens nje perdorues pa emer
    3. email

      • Do te mbaje e-mailin e perdoruesit me ane te te cilit mund te logohet ne faqe
      • Do te jete i tipit varchar me maksimumi 50 karaktere.
      • Nuk duhet te pranoje vleren NULL sepse perdoruesi duhet te kete patjeter nje email
    4. password

      • Do te mbaje fjalekalimin e perdoruesit me ane te te cilit do te logohet ne faqe
      • Do te jete i tipit varchar me maksimumi 100 karaktere.
      • Nuk duhet te pranoje vleren NULL sepse perdoruesi duhet te kete patjeter nje fjalekalim
    5. tipi

      • Do te jete i nje lloj tipi te vecante te quajtur SET('0', '1') i cili mban vleren 0 ose vleren 1
      • Vlera 0 tregon qe perdoruesi eshte administrator, ndersa vlera 1 tregon qe perdoruesi eshte pedagog
      • Vlera default do te jete 1
    6. id_departament

      • Do te jete FOREIGN KEY qe referencon fushen id te tabeles departamentet
      • Do te jete i tipit int pasi referencon nje fushe te ketij tipi
      • Mund te mbaje edhe vleren NULL sepse perdoruesit e tipit 0 (administrator) nuk duhet te jene te lidhur me departamentin, ndersa pedagoget po.
  • artikujt - Do te mbaje listen e lajmeve

    1. id

      • Do te jete celes primar sepse eshte identifikues unik.
      • Nuk do te pranoje vlera NULL sepse duhet te jete gjithnje numer, i tipit int
      • Do te jete AUTO_INCREMENT ne menyre qe kur te shtojme artikull te ri, id-ja te gjenerohet automatikisht
    2. titulli

      • Do te mbaje titullin e artikullit
      • Do te jete i tipit varchar qe pranon maksimumi 255 karaktere
      • Nuk duhet te pranoje vleren NULL sepse nuk ka sens nje artikull pa titull
    3. pershkrimi

      • Do te mbaje permbajtjen e artikullit
      • Do te jete i tipit text
      • Nuk duhet te pranoje vleren NULL sepse nuk ka sens nje artikull pa permbajtje
    4. data

      • Do te mbaje daten e krijimit te artikullit
      • Do te jete i tipit date
      • Nuk duhet te pranoje vleren NULL sepse cdo artikull duhet te kete nje date krijimi
    5. id_departament

      • Do te jete FOREIGN KEY qe referencon fushen id te tabeles departamentet
      • Do te jete i tipit int pasi referencon nje fushe te ketij tipi
      • Nuk duhet te pranoje vleren NULL sepse artikujt do te kategorizohen sipas departamenteve, ndaj na sherben qe cdo artikull te jete i lidhur me nje departament
  • njoftimet - Do te mbaje listen e njoftimeve

    1. id

      • Do te jete celes primar sepse eshte identifikues unik.
      • Nuk do te pranoje vlera NULL sepse duhet te jete gjithnje numer, i tipit int
      • Do te jete AUTO_INCREMENT ne menyre qe kur te shtojme njoftim te ri, id-ja te gjenerohet automatikisht
    2. titulli

      • Do te mbaje titullin e njoftimit
      • Do te jete i tipit varchar qe pranon maksimumi 255 karaktere
      • Mund te pranoje vleren NULL
    3. pershkrimi

      • Do te mbaje permbajtjen e njoftimit
      • Do te jete i tipit text
      • Nuk duhet te pranoje vleren NULL sepse nuk ka sens nje njoftim pa permbajtje
    4. data

      • Do te mbaje daten e krijimit te njoftimit
      • Do te jete i tipit date
      • Nuk duhet te pranoje vleren NULL sepse cdo njoftim duhet te kete nje date krijimi
    5. id_departament

      • Do te jete FOREIGN KEY qe referencon fushen id te tabeles departamentet
      • Do te jete i tipit int pasi referencon nje fushe te ketij tipi
      • Nuk duhet te pranoje vleren NULL sepse njoftimet do te kategorizohen sipas departamenteve, ndaj na sherben qe cdo njoftim te jete i lidhur me nje departament

Per te ndertuar tabelat e mesiperme, ndertojme deklaratat SQL perkatese dhe i ekzekutojme ato. Per me teper sqarim ju sugjeroj t'i riktheheni seksionit 7.3 "Ndertimi i nje baze te dhenash reale".

Databaza e ndertuar paraqitet ne skemen e meposhtme:

Database Schema

Popullimi

Eshte e nevojshme qe fillimisht bazen e te dhenave ta popullojme me te dhenat baze ne menyre qe pas implementimit te sistemi te kemi mundesi te shohim permbajtjet kryesore te faqes p.sh. listen e departamenteve. Po ashtu eshte e nevojshme krijimi fillestar i nje perdoruesi te tipit administrator. Nuk eshte i nevojshem krijimi i perdoruesve te tjere pasi me ane te nje perdoruesi te tipit administrator mund te krijojme perdorues te tjere, pasi te kemi implementuar sistemin.

Tabelat qe do te popullojme jane:

  • departamentet - Do te shtojme tre departamentet me te cilat perbehet fakulteti i tekologjise se informacionit
  • perdoruesit - Do te shtojme nje administrator te sistemit
  • njoftimet - Do te shtojme dy njoftime per arsye testimi
  • artikujt - Do te shtojme dy artikuj per arsye testimi

Popullojme tabelen departamentet:

INSERT INTO departamentet (emri, pershkrimi)
VALUES ( 'Departamenti i Elektronikës dhe Telekomunikacionit', '...' );

INSERT INTO departamentet (emri, pershkrimi)
VALUES ( 'Departamenti i Inxhinierisë Informatike', '...' );

INSERT INTO departamentet (emri, pershkrimi)
VALUES ( 'Departamenti i Bazave të Informatikës', '...' );

Pas ekzekutimit te deklaratave SQL te mesiperme, ne tabele do te shtohen tre rekorde te reja. Ekzekutojme komanden SELECT per te pare rekordet e tabeles:

Komanda: SELECT * FROM departamentet;

id emri pershkrimi
1 Departamenti i Elektronikës dhe Telekomunikacionit ...
2 Departamenti i Inxhinierisë Informatike ...
3 Departamenti i Bazave të Informatikës ...

Popullojme tabelen perdoruesit:

INSERT INTO perdoruesit (emri, email, password, tipi, id_departament)
VALUES ( 'Alban Afmeti', 'albanafmeti@gmail.com', MD5("test"), 0, 1 );

Ne deklaraten e mesiperme kemi perdorur nje funksion te brendshem te SQL-se qe eshte MD5(...). Ky funksion merr si input nje stringe dhe kthen nje stringe te enkriptuar. Enkriptimi perdoret per te dhenat sekrete. Kur krijojme nje perdorues ne sistem me nje fjalekalim perkates, fjalekalimin nuk mund ta leme te dukshem ne databaze, per kete arsye e enkriptojme duke perdorur MD5. MD5 eshte nje forme enkriptimi me nje drejtim. Trajtimi i ceshjtes sesi funksionin enkriptimi eshte jashte temes se ketij libri keshtu qe per me shume mund te kerkoni online ose te lexoni libra te posacem.

Pas ekzekutimit te deklaratave SQL te mesiperme, ekzekutojme komanden SELECT per te pare rekordet e tabeles:

Komanda: SELECT * FROM perdoruesit;

id emri email password tipi id_departament
1 Alban Afmeti albanafmeti@gmail.com 098f6bcd4621d373cade4e832627b4f6 0 1

Paraqitja e fjalekalimit 098f6bcd4621d373cade4e832627b4f6 eshte outputi qe ka dale nga funksioni MD5(...) kur i kemi dhene vleren test.

Popullojme tabelen artikujt:

INSERT INTO artikujt (titulli, pershkrimi, data, id_departament)
VALUES ( 'Zgjedhja e dekanit te ri te fakultetit', 'Dekani i ri u zgjodh. Tashme kane mbetur dhe pak dite per...', '2017-02-09',  1 );

INSERT INTO artikujt (titulli, pershkrimi, data, id_departament)
VALUES ( 'Zgjedhja e dekanit te ri te fakultetit', 'Dekani i ri u zgjodh. Tashme kane mbetur dhe pak dite per...', '2017-02-09',  1 );

Pas ekzekutimit te deklaratave te mesiperme, bejme nje SELECT ne databaze dhe shohim rekordet e reja:

Komanda: SELECT * FROM artikujt;

id titulli pershkrimi data id_departament
1 Zgjedhja e dekanit te ri te fakultetit Dekani i ri u zgjodh. Tashme kane mbetur dhe pak dite per... 2017-02-09 1
2 Zgjedhja e dekanit te ri te fakultetit Dekani i ri u zgjodh. Tashme kane mbetur dhe pak dite per... 2017-02-09 1

Popullojme tabelen njoftimet:

INSERT INTO njoftimet (titulli, pershkrimi, data, id_departament)
VALUES ( 'Njoftim ne lidhje me zhvillimin e mesimit ne...', 'Njoftim ne lidhje me zhvillimin e mesimit ne...', '2017-02-09',  1 );

INSERT INTO njoftimet (titulli, pershkrimi, data, id_departament)
VALUES ( 'Njoftim ne lidhje me zhvillimin e mesimit ne...', 'Njoftim ne lidhje me zhvillimin e mesimit ne...', '2017-02-09',  1 );

Pas ekzekutimit te deklaratave te mesiperme, bejme nje SELECT ne databaze dhe shohim rekordet e reja:

Komanda: SELECT * FROM njoftimet;

id titulli pershkrimi data id_departament
1 Njoftim ne lidhje me zhvillimin e mesimit ne... Njoftim ne lidhje me zhvillimin e mesimit ne... 2017-02-09 1
2 Njoftim ne lidhje me zhvillimin e mesimit ne... Njoftim ne lidhje me zhvillimin e mesimit ne... 2017-02-09 1

Pas popullimit te databazes me te dhenat e nevojshme per te kryer testime gjate implementimit te sistemit, ajo eshte gati per perdorim.

results matching ""

    No results matching ""